//package com.smart.community.commons.utils;
//
//import com.smart.community.commons.enums.RoleCodeEnum;
//
//import lombok.extern.slf4j.Slf4j;
//
///**
// * 数据权限工具类
// * @author Wu.Liang
// * @since 2024-12-19
// * @version 1.0.0
// */
//@Slf4j
//public class DataScopeUtils {
//    
//    /**
//     * 数据权限类型枚举
//     */
//    public enum DataScopeType {
//        ALL,           // 全部数据
//        COMPANY,       // 公司数据
//        COMMUNITY,     // 社区数据
//        BUILDING,      // 楼栋数据
//        UNIT,          // 单元数据
//        ROOM,          // 房间数据
//        PERSONAL       // 个人数据
//    }
//    
//    /**
//     * 获取用户数据权限范围
//     * 
//     * @param userRole 用户角色
//     * @param userType 用户类型
//     * @param companyId 公司ID
//     * @param communityId 社区ID
//     * @return 数据权限类型
//     */
//    public static DataScopeType getUserDataScope(String userRole, String userType, 
//                                               Long companyId, Long communityId) {
//        // 超级管理员拥有全部数据权限
//        if (RoleCodeEnum.SUPER_ADMIN.getCode().equals(userRole)) {
//            return DataScopeType.ALL;
//        }
//        
//        // 系统管理员拥有全部数据权限
//        if ("SYSTEM_ADMIN".equals(userRole)) {
//            return DataScopeType.ALL;
//        }
//        
//        // 公司管理员拥有公司数据权限
//        if ("COMPANY_ADMIN".equals(userRole)) {
//            return DataScopeType.COMPANY;
//        }
//        
//        // 社区管理员拥有社区数据权限
//        if ("COMMUNITY_ADMIN".equals(userRole)) {
//            return DataScopeType.COMMUNITY;
//        }
//        
//        // 物业管理员拥有社区数据权限
//        if ("PROPERTY_ADMIN".equals(userRole)) {
//            return DataScopeType.COMMUNITY;
//        }
//        
//        // 楼栋管理员拥有楼栋数据权限
//        if ("BUILDING_ADMIN".equals(userRole)) {
//            return DataScopeType.BUILDING;
//        }
//        
//        // 单元管理员拥有单元数据权限
//        if ("UNIT_ADMIN".equals(userRole)) {
//            return DataScopeType.UNIT;
//        }
//        
//        // 普通用户拥有个人数据权限
//        return DataScopeType.PERSONAL;
//    }
//    
//    /**
//     * 构建数据权限SQL条件
//     * 
//     * @param dataScope 数据权限类型
//     * @param userId 用户ID
//     * @param companyId 公司ID
//     * @param communityId 社区ID
//     * @param buildingId 楼栋ID
//     * @param unitId 单元ID
//     * @return SQL条件
//     */
//    public static String buildDataScopeCondition(DataScopeType dataScope, Long userId,
//                                               Long companyId, Long communityId,
//                                               Long buildingId, Long unitId) {
//        switch (dataScope) {
//            case ALL:
//                return "1=1";
//            case COMPANY:
//                return String.format("company_id = %d", companyId);
//            case COMMUNITY:
//                return String.format("community_id = %d", communityId);
//            case BUILDING:
//                return String.format("building_id = %d", buildingId);
//            case UNIT:
//                return String.format("unit_id = %d", unitId);
//            case ROOM:
//                return String.format("room_id IN (SELECT room_id FROM user_room WHERE user_id = %d)", userId);
//            case PERSONAL:
//                return String.format("created_by = %d OR updated_by = %d", userId, userId);
//            default:
//                return "1=0";
//        }
//    }
//    
//    /**
//     * 检查用户是否有数据访问权限
//     * 
//     * @param userDataScope 用户数据权限
//     * @param targetDataScope 目标数据权限
//     * @return 是否有权限
//     */
//    public static boolean hasDataAccessPermission(DataScopeType userDataScope, DataScopeType targetDataScope) {
//        // 全部数据权限可以访问所有数据
//        if (userDataScope == DataScopeType.ALL) {
//            return true;
//        }
//        
//        // 数据权限层级：ALL > COMPANY > COMMUNITY > BUILDING > UNIT > ROOM > PERSONAL
//        return userDataScope.ordinal() <= targetDataScope.ordinal();
//    }
//    
//    /**
//     * 获取数据权限描述
//     * 
//     * @param dataScope 数据权限类型
//     * @return 权限描述
//     */
//    public static String getDataScopeDescription(DataScopeType dataScope) {
//        switch (dataScope) {
//            case ALL:
//                return "全部数据";
//            case COMPANY:
//                return "公司数据";
//            case COMMUNITY:
//                return "社区数据";
//            case BUILDING:
//                return "楼栋数据";
//            case UNIT:
//                return "单元数据";
//            case ROOM:
//                return "房间数据";
//            case PERSONAL:
//                return "个人数据";
//            default:
//                return "未知权限";
//        }
//    }
//}
